package karaoke.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Date;
import java.util.ArrayList;
import java.util.Collection;

import karaoke.excepcion.DAOExcepcion;
import karaoke.modelo.Evento;
import karaoke.util.ConexionBD;

public class EventoDAO extends BaseDAO{

	public Evento insertar(Evento vo) throws DAOExcepcion {
		String query = "insert into tb_evento(even_nombre,even_fecha, even_hora, even_capacidad, even_descripcion,BD_Local_local_Id) values (?,?,?,?,?,?)";
		Connection con = null;
		PreparedStatement stmt = null;
		ResultSet rs = null;
		Date fecha = new Date(vo.getEven_Fecha().getTime());
		try {
			con = ConexionBD.obtenerConexion();
			stmt = con.prepareStatement(query);
			stmt.setString(1,vo.getEven_nombre());
			stmt.setDate(2, fecha);
			stmt.setString(3, vo.getEven_Hora());
			stmt.setInt(4, vo.getEven_Capacidad());
			stmt.setString(5, vo.getEven_Descripcion());
			stmt.setInt(6, vo.getLocal_Id());
			int i = stmt.executeUpdate();
			if (i != 1) {
				throw new SQLException("No se pudo insertar");
			}
			/*
			 * // Obtener el ultimo id int id = 0; query =
			 * "select last_insert_id()"; stmt = con.prepareStatement(query); rs
			 * = stmt.executeQuery(); if (rs.next()) { id = rs.getInt(1); }
			 * vo.setLocal_Id(id);
			 */
		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarResultSet(rs);
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
		return vo;
	}

public Collection<Evento> buscarPorNombre(String nombre) throws DAOExcepcion {
		System.out.println("RolDAO: buscarPorNombre(String nombre)");
		String query = "SELECT even_Id,even_nombre,even_fecha,even_hora,even_capacidad,even_descripcion,BD_Local_local_Id FROM tb_evento WHERE even_nombre like ?";
		Collection<Evento> lista = new ArrayList<Evento>();
		Connection con = null;
		PreparedStatement stmt = null;
		ResultSet rs = null;
		try {
			con = ConexionBD.obtenerConexion();
			stmt = con.prepareStatement(query);
			stmt.setString(1, "%" + nombre + "%");
			rs = stmt.executeQuery();
			while (rs.next()) {
				Evento vo = new Evento();
				vo.setEven_Id(rs.getInt(1));
				vo.setEven_nombre(rs.getString(2));
				vo.setEven_Fecha(rs.getDate(3));
				vo.setEven_Hora(rs.getString(4));
				vo.setEven_Capacidad(rs.getInt(5));
				vo.setEven_Descripcion(rs.getString(6));
				vo.setLocal_Id(rs.getInt(7));
				lista.add(vo);
			}
		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarResultSet(rs);
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
		return lista;
	}
public Collection<Evento> listar() throws DAOExcepcion {
		System.out.println("EventoDAO: listar()");
		Collection<Evento> c = new ArrayList<Evento>();
		Connection con = null;
		PreparedStatement stmt = null;
		ResultSet rs = null;
		try {
			con = ConexionBD.obtenerConexion();
			String query = "SELECT even_Id,even_nombre,even_fecha,even_hora,even_capacidad,even_descripcion,BD_Local_local_Id FROM tb_evento";
			
			stmt = con.prepareStatement(query);
			rs = stmt.executeQuery();
			while (rs.next()) {
				Evento vo = new Evento();
				vo.setEven_Id(rs.getInt(1));
				vo.setEven_nombre(rs.getString(2));
				vo.setEven_Fecha(rs.getDate(3));
				vo.setEven_Hora(rs.getString(4));
				vo.setEven_Capacidad(rs.getInt(5));
				vo.setEven_Descripcion(rs.getString(6));
				vo.setLocal_Id(rs.getInt(7));
				c.add(vo);
			}
		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
		return c;
	}

	public void eliminar(int even_Id) throws DAOExcepcion {
		System.out.println("EventoDAO: eliminar(int even_Id)");
		String query = "DELETE FROM tb_evento WHERE even_Id=?";
		Connection con = null;
		PreparedStatement stmt = null;
		try {
			con = ConexionBD.obtenerConexion();
			stmt = con.prepareStatement(query);
			stmt.setInt(1, even_Id);
			int i = stmt.executeUpdate();
			if (i != 1) {

				throw new SQLException("No se pudo eliminar");
			}
		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
}

	public void actualizar(Evento vo) throws DAOExcepcion {
		//System.out.println("EventoDAO: actualizar(Evento vo)");
		String query ="UPDATE tb_evento SET even_nombre= ?,even_fecha=?,even_hora=?,even_capacidad=?,even_descripcion=?,BD_Local_local_Id=?  WHERE even_Id=? ";
		Connection con = null;
		PreparedStatement stmt = null;
		Date fecha = new Date(vo.getEven_Fecha().getTime());
		try {
			con = ConexionBD.obtenerConexion();
			stmt = con.prepareStatement(query);
			stmt.setString(1, vo.getEven_nombre());
			stmt.setDate(2, fecha);
			stmt.setString(3, vo.getEven_Hora());
			stmt.setInt(4, vo.getEven_Capacidad());
			stmt.setString(5, vo.getEven_Descripcion());
			stmt.setInt(6, vo.getLocal_Id());
			stmt.setInt(7, vo.getEven_Id());
			
			int i = stmt.executeUpdate();
			if (i != 1) {
				throw new SQLException("No se pudo actualizar");
			}
		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
	}
	public Evento obtener(int idEvento) throws DAOExcepcion {
		Evento vo = new Evento();
		Connection con = null;
		PreparedStatement stmt = null;
		ResultSet rs = null;
		try {
			String query = "SELECT even_Id,even_nombre,even_fecha,even_hora,even_capacidad,even_descripcion,BD_Local_local_Id FROM tb_evento WHERE even_id=?";
			con = ConexionBD.obtenerConexion();
			stmt = con.prepareStatement(query);
			stmt.setInt(1, idEvento);
			rs = stmt.executeQuery();
			if (rs.next()) {
				vo.setEven_Id(rs.getInt(1));
				vo.setEven_nombre(rs.getString(2));
				vo.setEven_Fecha(rs.getDate(3));
				vo.setEven_Hora(rs.getString(4));
				vo.setEven_Capacidad(rs.getInt(5));
				vo.setEven_Descripcion(rs.getString(6));
				vo.setLocal_Id(rs.getInt(7));
			}
		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarResultSet(rs);
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
		return vo;
	}
}
